package bszt.oppo;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Code03 {

    /**
     * 问题描述
     * K小姐在一次偶然的机会中，获得了一串神秘的数字信号。这些信号隐藏着一个秘密，只有当选取的连续信号段中所有数字的乘积在二进制表示下末尾至少有k个零时，才能解锁。K小姐希望找到满足条件的最短信号段，以尽快揭开秘密
     * <p>
     * 输入格式
     * 第一行包含两个正整数n和k，分别表示信号的长度和乘积二进制表示末尾至少需要的零的个数
     * 第二行包含n个正整数，表示这串神秘的数字信号
     * <p>
     * 输出格式
     * 输出一个整数，代表满足条件的最短信号段的长度。如果不存在这样的信号段，输出-1
     */


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] signals = new int[n];
        for (int i = 0; i < n; i++) {
            int count = 0;
            int signal = sc.nextInt();
            while (signal % 2 == 0) {
                signal = signal >> 1;
                count++;
            }
            signals[i] = count;
        }
        int left = 0, sum = 0, minLength = Integer.MAX_VALUE;
        for (int right = 0; right < n; right++) {
            sum += signals[right];
            while (sum >= k) {
                minLength = Math.min(minLength, right - left + 1);
                sum -= signals[left++];
            }
        }
        System.out.println(minLength == Integer.MAX_VALUE ? -1 : minLength);
    }

}
